Sign in to follow this  
Followers 0
hogfan

Multidimensional Array & _ArrarySearch question........

20 posts in this topic

I am creating the following array based on an example I found in another post here. I read my .ini file into the array and construct a multidimensional array by using the StringSplit function.

Func _populateARRAY()
Dim $myPAONUS
$PAONUREAD= IniReadSection(@ScriptDir & "\mylist.ini", "ENTRIES")
 
;Define a new array
Global $PAONUREAD2[$PAONUREAD [0][0]+ 1][4]
 
For $i = 1 to $PAONUREAD [0][0]
 
; Split the delimited string into an array
Global $myPAONUS = StringSplit($PAONUREAD[$i][1], "|")
Next
EndFunc

My mylist.ini is formatted as below:

[ENTRIES]

Key1=Name1|1|Location1
Key2=Name2|3|Location2
Key3=Name3|5|Location3

I am then trying to use the _ArraySearch function to search based on the "Name" in my array. This function should return the index of the array entry and then I can use that information to get the "Number" & "Location" info that corresponds to that array index.

However, when I execute my search function I get a returned index value that is a number that does not correspond to the "Name" entry I searched for.

i.e If I do an _ArraySearch on "Name2", it should return and index value of 1, but that is not happening. Does anybody see an issue with the way my array is defined that could be causing the issue? Thanks in advance for any help.

-hogfan

Share this post


Link to post
Share on other sites



hogfan,

You are continually redeclaring the $PAONUREAD2 array within the loop but never actually adding anything to it from the $myPAONUS array created by the StringSplit. ;)

Try this:

#include <Array.au3>

_populateARRAY()

_ArrayDisplay($PAONUREAD2)

#include <Array.au3>

_populateARRAY()

_ArrayDisplay($PAONUREAD2)

Func _populateARRAY()
    Local  $myPAONUS
    $PAONUREAD = IniReadSection(@ScriptDir & "\mylist.ini", "ENTRIES")

    ;Define a new array
    Global $PAONUREAD2[$PAONUREAD[0][0] + 1][4]

    For $i = 1 To $PAONUREAD[0][0]

        ; Split the delimited string into an array
        $myPAONUS = StringSplit($PAONUREAD[$i][1], "|")
        For $j = 1 To $myPAONUS[0]
            $PAONUREAD2[$i][$j] = $myPAONUS[$j]
        Next
    Next
EndFunc   ;==>_populateARRAY

Now the $PAONUREAD2 array is filled correctly and your _ArraySearch should work. :graduated:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

Hmm, I guess I am misunderstanding you because the $PAONUREAD2 array is declared outside of my For loop. The For loop should be looping through each index of the $PAONUREAD2 array and performing the StringSplit function on each key and storing the info in the new $myPAONUS array.

-hogfan

Edited by hogfan

Share this post


Link to post
Share on other sites

No, what's happening in your script is you're looping through the $PAONUREAD array, splitting each of its elements with string split and putting the result into the new array $myPAONUS. The array $myPAONUS is only going to contain the last element of the $PAONUREAD after the for next loop because of this. But the code you're showing doesn't show you using the array $myPAONUS for anything anyways, so I'm not sure what it is you're searching on to find the strings you're looking for.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

hogfan,

My apologies - the danger of posting at the end of a longish day! :graduated:

BrewManNH has it right - I meant to say that you were redeclaring your $myPAONUS array in the loop and never transferring the data within it to the $PAONUREAD2 array, which I assumed is the one you are searching.

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Ok, I am actually trying to do the StringSplit and load everything into $myPAONUS array from the $PAONUREAD2 Array. $myPAONUS is a global array. I am then using a totally separate function so search for a match of the "NAME" field from my .ini in the newly populated $myPAONUS array. Hope this clears things up a little.

-hogfan

Share this post


Link to post
Share on other sites

hogfan,

So this should do the trick: :graduated:

#include <Array.au3>

; Declare the array as Global
Global $myPAONUS

; Fill the array
_populateARRAY()

; Test the search
$iIndex = _ArraySearch($myPAONUS, "Name2", 0, 0, 0, 0, 1, 1)

; And display the full array showing that the return is correct
_ArrayDisplay($myPAONUS, "Name2 is on Row " & $iIndex)

Func _populateARRAY()

    ; Get the entries
    Local $PAONUREAD = IniReadSection(@ScriptDir & "\mylist.ini", "ENTRIES")

    ; Size the Global array correctly
    Global $myPAONUS[$PAONUREAD[0][0] + 1][4]

    ; Declare this Local array outside the loop
    Local $PAONUREAD2
    For $i = 1 To $PAONUREAD[0][0]
        ; Split the delimited string into an array
        $PAONUREAD2 = StringSplit($PAONUREAD[$i][1], "|")
        ; Now add the elements to the Global array
        For $j = 1 To $PAONUREAD2[0]
            $myPAONUS[$i][$j] = $PAONUREAD2[$j]
        Next
    Next

EndFunc   ;==>_populateARRAY

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

I have modified my script to this, but I am still only getting the last item into the array.

Func _populateARRAY()
 
$PAONUREAD= IniReadSection(@ScriptDir & "\mylist.ini", "ENTRIES")
;Define a new 2D array
Global $PAONUREAD2[$PAONUREAD [0][0] +1][4]
 
For $i = 1 to $PAONUREAD [0][0]
; Split the delimited string into an array
Global $myPAONUS = StringSplit($PAONUREAD[$i][1], "|")
 
; Populate the new array with the individual items of this INI Key.
$PAONUREAD2[$i] [1] = $myPAONUS[1]
$PAONUREAD2[$i] [2] = $myPAONUS[2]
$PAONUREAD2[$i] [3] = $myPAONUS[3]
Next
EndFunc

What am I missing? The stringsplit has to happen on each .ini key.

-hogfan

Share this post


Link to post
Share on other sites

hogfan,

Have you tried the script I posted just above? :graduated:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Thanks works nicely. Thanks so much for the assisistance on this one.

-hogfan

Share this post


Link to post
Share on other sites

hogfan,

My pleasure. :graduated:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Hi all,

I use the M23's code for a while, now I have a ini file like this

[Systems]
ALI=ALI1
ASP=ASP1
AUG=AUG1
CLI=CLI1|CLI2
ELE=ELE0|ELE2|ELE3|ELE4
ENE=ENE1|ENE3

where the item's number in value can change sometimes.

Is it possible change the code and make it more dynamic?

Thanks

Share this post


Link to post
Share on other sites

maba,

If you mean deal with an ini file with an unlnown number of "|" delimited items in the value then you can do it like this: :bye:

#include <Array.au3>

; Declare the array as Global
Global $sGlobal_Array

; Fill the array
_populateARRAY()

; And display the full array
_ArrayDisplay($sGlobal_Array)

Func _populateARRAY()

    ; Get the entries
    Local $aLocal_Array = IniReadSection(@ScriptDir & "mylist.ini", "Systems")

    ; Check for max item count
    $iMax = 0
    For $i = 1 To $aLocal_Array[0][0]
        ; Count the delimiters - the actual string is unchanged
        StringReplace($aLocal_Array[$i][1], "|", "")
        ; Add 1 to get number of items and compare to the current max value
        If @extended + 1 > $iMax Then
            ; Reset the max value
            $iMax = @extended + 1
        EndIf
    Next

    ; Size the Global array correctly
    Global $sGlobal_Array[$aLocal_Array[0][0] + 1][$iMax + 1]

    Local $aSplit
    For $i = 1 To $aLocal_Array[0][0]
        ; Split the delimited string into an array
        $aSplit = StringSplit($aLocal_Array[$i][1], "|")
        ; Now add the elements to the Global array
        For $j = 1 To $aSplit[0]
            $sGlobal_Array[$i][$j] = $aSplit[$j]
        Next
    Next

EndFunc   ;==>_populateARRAY

Did I guess correctly? :oops:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

P E R F E C T ! ! :oops:

Share this post


Link to post
Share on other sites

maba,

I polished my crystal ball last night - seems to be working well! :oops:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Hi, hi.. :oops:

Yes it works! So.. I have another question for it :doh:

If a would use also the KEY in my array? I use it for my problematic combobox.. :bye:

ALI
--ALI1
ASP
--ASP1
AUG
--AUG1
CLI
--CLI1
--CLI2

Share this post


Link to post
Share on other sites

maba,

That is easy - you should be able to work it out yourself. Answer these questions and it will become obvious: :bye:

- 1. Where is $aGlobal_Array filled?

- 2. Which elements of $aGlobal_Array are not filled?

- 3. Which elements of $aLocal_Array need to go into those empty elements?

See if you can solve it. Come back in an hour if you are still looking. :oops:

M23

To any other readers: Please refrain from posting an answer for a while - let maba try and do this on his own. :doh:


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Ok, ok.. silly question!

Is this the best solution?

Func _populateARRAY()
    ; Get the entries
    Local $aLocal_Array = IniReadSection(@ScriptDir & "\arrayMultiTest.ini", "Systems")
    ; Check for max item count
    $iMax = 0
    For $i = 1 To $aLocal_Array[0][0]
        ; Count the delimiters - the actual string is unchanged
        StringReplace($aLocal_Array[$i][1], "|", "")
        ; Add 1 to get number of items and compare to the current max value
        If @extended + 1 > $iMax Then
            ; Reset the max value
            $iMax = @extended + 1
        EndIf
    Next
    ; Size the Global array correctly
    Global $sGlobal_Array[$aLocal_Array[0][0] + 1][$iMax + 1]
    Local $aSplit
    For $i = 1 To $aLocal_Array[0][0]
        ; Split the delimited string into an array
        $aSplit = StringSplit($aLocal_Array[$i][1], "|")
        ; Now add the elements to the Global array
        For $j = 1 To $aSplit[0]
            $sGlobal_Array[$i][0] = $aLocal_Array[$i][0] ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            $sGlobal_Array[$i][$j] = $aSplit[$j]
        Next
    Next
EndFunc   ;==>_populateARRAY

But.. How to find $sGlobal_Array[$i] count?

$cCombo3 = GUICtrlCreateCombo("", 10, 70, 200, 20, $CBS_DROPDOWNLIST + $WS_VSCROLL)
_GUICtrlComboBox_BeginUpdate($cCombo3)
For $i = 1 To UBound($sGlobal_Array) -1
_GUICtrlComboBox_AddString($cCombo3, $sGlobal_Array[$i][0])
For $j = 1 To 8 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  If $sGlobal_Array[$i][$j] <> "" Then
   _GUICtrlComboBox_AddString($cCombo3, '  ' & $sGlobal_Array[$i][$j])
  EndIf
Next
Next
_GUICtrlComboBox_EndUpdate($cCombo3)

I've tried with _ArrayAdd and _ArrayInsert (with $aSplit[0] value), UBound but no luck.

Thanks

Share this post


Link to post
Share on other sites

maba,

Is this the best solution?

Pretty close - you just do not need to put it in the inner loop as it need only be done the once. :oops:

And you find the number of columns in the array by using the "Dimension" parameter with UBound. :doh:

Which gives you this:

#include <GUIConstantsEx.au3>
#include <Array.au3>
#include <GuiComboBox.au3>

; Declare the array as Global
Global $aGlobal_Array

; Fill the array
_populateARRAY()

_ArrayDisplay($aGlobal_Array)

; Create GUI
$hGUI = GUICreate("Test", 500, 500)

$cCombo3 = GUICtrlCreateCombo("", 10, 70, 200, 20)
_GUICtrlComboBox_BeginUpdate($cCombo3)
For $i = 1 To UBound($aGlobal_Array) - 1 
    _GUICtrlComboBox_AddString($cCombo3, $aGlobal_Array[$i][0])
    For $j = 1 To UBound($aGlobal_Array, 2) - 1 ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        If $aGlobal_Array[$i][$j] <> "" Then
            _GUICtrlComboBox_AddString($cCombo3, '  ' & $aGlobal_Array[$i][$j])
        EndIf
    Next
Next
_GUICtrlComboBox_EndUpdate($cCombo3)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _populateARRAY()

    ; Get the entries
    Local $aLocal_Array = IniReadSection(@ScriptDir & "mylist.ini", "Systems")

    ; Check for max item count
    $iMax = 0
    For $i = 1 To $aLocal_Array[0][0]
        ; Count the delimiters - the actual string is unchanged
        StringReplace($aLocal_Array[$i][1], "|", "")
        ; Add 1 to get number of items and compare to the current max value
        If @extended + 1 > $iMax Then
            ; Reset the max value
            $iMax = @extended + 1
        EndIf
    Next

    ; Size the Global array correctly
    Global $aGlobal_Array[$aLocal_Array[0][0] + 1][$iMax + 1]

    Local $aSplit
    For $i = 1 To $aLocal_Array[0][0]
        $aGlobal_Array[$i][0] = $aLocal_Array[$i][0] ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        ; Split the delimited string into an array
        $aSplit = StringSplit($aLocal_Array[$i][1], "|")
        ; Now add the elements to the Global array
        For $j = 1 To $aSplit[0]
            $aGlobal_Array[$i][$j] = $aSplit[$j]
        Next
    Next

EndFunc   ;==>_populateARRAY

All clear? :bye:

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

Grrr.. why it works with your code?? :oops:

I've tried many times with different result! :/

Thanks, see you tomorrow!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0