{
  "contractName": "AddressIteratorStorage",
  "abi": [],
  "bytecode": "0x6080604052348015600f57600080fd5b50603580601d6000396000f3006080604052600080fd00a165627a7a72305820ace0476e94c56057a94c696d94f12114ef5ef601b4fc23de6c4f053cb8bb94e90029",
  "deployedBytecode": "0x6080604052600080fd00a165627a7a72305820ace0476e94c56057a94c696d94f12114ef5ef601b4fc23de6c4f053cb8bb94e90029",
  "sourceMap": "191:2169:75:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;191:2169:75;;;;;;;",
  "deployedSourceMap": "191:2169:75:-;;;;;",
  "source": "pragma solidity ^0.4.19;\n\nimport \"../lib/DoublyLinkedList.sol\";\n\n/**\n  @title Address Iterator Storage\n  @author DigixGlobal Pte Ltd\n  @notice See: [Doubly Linked List](/DoublyLinkedList)\n*/\ncontract AddressIteratorStorage {\n\n  // Initialize Doubly Linked List of Address\n  using DoublyLinkedList for DoublyLinkedList.Address;\n\n  /**\n    @notice Reads the first item from the list of Address\n    @param _list The source list\n    @return {\"_item\" : \"The first item from the list\"}\n  */\n  function read_first_from_addresses(DoublyLinkedList.Address storage _list)\n           internal\n           constant\n           returns (address _item)\n  {\n    _item = _list.start_item();\n  }\n\n\n  /**\n    @notice Reads the last item from the list of Address\n    @param _list The source list\n    @return {\"_item\" : \"The last item from the list\"}\n  */\n  function read_last_from_addresses(DoublyLinkedList.Address storage _list)\n           internal\n           constant\n           returns (address _item)\n  {\n    _item = _list.end_item();\n  }\n\n  /**\n    @notice Reads the next item on the list of Address\n    @param _list The source list\n    @param _current_item The current item to be used as base line\n    @return {\"_item\" : \"The next item from the list based on the specieid `_current_item`\"}\n  */\n  function read_next_from_addresses(DoublyLinkedList.Address storage _list, address _current_item)\n           internal\n           constant\n           returns (address _item)\n  {\n    _item = _list.next_item(_current_item);\n  }\n\n  /**\n    @notice Reads the previous item on the list of Address\n    @param _list The source list\n    @param _current_item The current item to be used as base line\n    @return {\"_item\" : \"The previous item from the list based on the spcified `_current_item`\"}\n  */\n  function read_previous_from_addresses(DoublyLinkedList.Address storage _list, address _current_item)\n           internal\n           constant\n           returns (address _item)\n  {\n    _item = _list.previous_item(_current_item);\n  }\n\n  /**\n    @notice Reads the list of Address and returns the length of the list\n    @param _list The source list\n    @return {\"_count\": \"The lenght of the list\"}\n  */\n  function read_total_addresses(DoublyLinkedList.Address storage _list)\n           internal\n           constant\n           returns (uint256 _count)\n  {\n    _count = _list.total();\n  }\n\n}\n",
  "sourcePath": "@digix/solidity-collections/contracts/abstract/AddressIteratorStorage.sol",
  "ast": {
    "absolutePath": "@digix/solidity-collections/contracts/abstract/AddressIteratorStorage.sol",
    "exportedSymbols": {
      "AddressIteratorStorage": [
        21671
      ]
    },
    "id": 21672,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21590,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".19"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:75"
      },
      {
        "absolutePath": "@digix/solidity-collections/contracts/lib/DoublyLinkedList.sol",
        "file": "../lib/DoublyLinkedList.sol",
        "id": 21591,
        "nodeType": "ImportDirective",
        "scope": 21672,
        "sourceUnit": 25117,
        "src": "26:37:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title Address Iterator Storage\n@author DigixGlobal Pte Ltd\n@notice See: [Doubly Linked List](/DoublyLinkedList)",
        "fullyImplemented": true,
        "id": 21671,
        "linearizedBaseContracts": [
          21671
        ],
        "name": "AddressIteratorStorage",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 21594,
            "libraryName": {
              "contractScope": null,
              "id": 21592,
              "name": "DoublyLinkedList",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25116,
              "src": "280:16:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DoublyLinkedList_$25116",
                "typeString": "library DoublyLinkedList"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "274:52:75",
            "typeName": {
              "contractScope": null,
              "id": 21593,
              "name": "DoublyLinkedList.Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22602,
              "src": "301:24:75",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                "typeString": "struct DoublyLinkedList.Address"
              }
            }
          },
          {
            "body": {
              "id": 21607,
              "nodeType": "Block",
              "src": "639:37:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21601,
                      "name": "_item",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21599,
                      "src": "645:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21602,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21596,
                          "src": "653:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21603,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "start_item",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24070,
                        "src": "653:16:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer) view returns (address)"
                        }
                      },
                      "id": 21604,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "653:18:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "645:26:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21606,
                  "nodeType": "ExpressionStatement",
                  "src": "645:26:75"
                }
              ]
            },
            "documentation": "@notice Reads the first item from the list of Address\n@param _list The source list\n@return {\"_item\" : \"The first item from the list\"}",
            "id": 21608,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_first_from_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21596,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21608,
                  "src": "522:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21595,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "522:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "521:40:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21600,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21599,
                  "name": "_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21608,
                  "src": "622:13:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21598,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "622:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "621:15:75"
            },
            "scope": 21671,
            "src": "487:189:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21621,
              "nodeType": "Block",
              "src": "987:35:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21615,
                      "name": "_item",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21613,
                      "src": "993:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21616,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21610,
                          "src": "1001:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21617,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "end_item",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24102,
                        "src": "1001:14:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer) view returns (address)"
                        }
                      },
                      "id": 21618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1001:16:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "993:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21620,
                  "nodeType": "ExpressionStatement",
                  "src": "993:24:75"
                }
              ]
            },
            "documentation": "@notice Reads the last item from the list of Address\n@param _list The source list\n@return {\"_item\" : \"The last item from the list\"}",
            "id": 21622,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_last_from_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21610,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21622,
                  "src": "870:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21609,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "870:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "869:40:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21614,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21613,
                  "name": "_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21622,
                  "src": "970:13:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "969:15:75"
            },
            "scope": 21671,
            "src": "836:186:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21638,
              "nodeType": "Block",
              "src": "1457:49:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21631,
                      "name": "_item",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21629,
                      "src": "1463:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21634,
                          "name": "_current_item",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21626,
                          "src": "1487:13:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21632,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21624,
                          "src": "1471:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21633,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next_item",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24220,
                        "src": "1471:15:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer,address) view returns (address)"
                        }
                      },
                      "id": 21635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1471:30:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1463:38:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21637,
                  "nodeType": "ExpressionStatement",
                  "src": "1463:38:75"
                }
              ]
            },
            "documentation": "@notice Reads the next item on the list of Address\n@param _list The source list\n@param _current_item The current item to be used as base line\n@return {\"_item\" : \"The next item from the list based on the specieid `_current_item`\"}",
            "id": 21639,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_next_from_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21624,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21639,
                  "src": "1317:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21623,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "1317:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21626,
                  "name": "_current_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21639,
                  "src": "1357:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21625,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1357:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1316:63:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21629,
                  "name": "_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21639,
                  "src": "1440:13:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21628,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1440:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1439:15:75"
            },
            "scope": 21671,
            "src": "1283:223:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21655,
              "nodeType": "Block",
              "src": "1953:53:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21648,
                      "name": "_item",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21646,
                      "src": "1959:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21651,
                          "name": "_current_item",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21643,
                          "src": "1987:13:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21649,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21641,
                          "src": "1967:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21650,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "previous_item",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24180,
                        "src": "1967:19:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer,address) view returns (address)"
                        }
                      },
                      "id": 21652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1967:34:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1959:42:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21654,
                  "nodeType": "ExpressionStatement",
                  "src": "1959:42:75"
                }
              ]
            },
            "documentation": "@notice Reads the previous item on the list of Address\n@param _list The source list\n@param _current_item The current item to be used as base line\n@return {\"_item\" : \"The previous item from the list based on the spcified `_current_item`\"}",
            "id": 21656,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_previous_from_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21644,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21641,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21656,
                  "src": "1813:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21640,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "1813:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21643,
                  "name": "_current_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21656,
                  "src": "1853:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21642,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1853:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1812:63:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21646,
                  "name": "_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21656,
                  "src": "1936:13:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21645,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1936:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1935:15:75"
            },
            "scope": 21671,
            "src": "1775:231:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21669,
              "nodeType": "Block",
              "src": "2324:33:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21663,
                      "name": "_count",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21661,
                      "src": "2330:6:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21664,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21658,
                          "src": "2339:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21665,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "total",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24038,
                        "src": "2339:11:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 21666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2339:13:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2330:22:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21668,
                  "nodeType": "ExpressionStatement",
                  "src": "2330:22:75"
                }
              ]
            },
            "documentation": "@notice Reads the list of Address and returns the length of the list\n@param _list The source list\n@return {\"_count\": \"The lenght of the list\"}",
            "id": 21670,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_total_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21658,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21670,
                  "src": "2206:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21657,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "2206:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2205:40:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21661,
                  "name": "_count",
                  "nodeType": "VariableDeclaration",
                  "scope": 21670,
                  "src": "2306:14:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21660,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2306:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2305:16:75"
            },
            "scope": 21671,
            "src": "2176:181:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 21672,
        "src": "191:2169:75"
      }
    ],
    "src": "0:2361:75"
  },
  "legacyAST": {
    "absolutePath": "@digix/solidity-collections/contracts/abstract/AddressIteratorStorage.sol",
    "exportedSymbols": {
      "AddressIteratorStorage": [
        21671
      ]
    },
    "id": 21672,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 21590,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".19"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:75"
      },
      {
        "absolutePath": "@digix/solidity-collections/contracts/lib/DoublyLinkedList.sol",
        "file": "../lib/DoublyLinkedList.sol",
        "id": 21591,
        "nodeType": "ImportDirective",
        "scope": 21672,
        "sourceUnit": 25117,
        "src": "26:37:75",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": "@title Address Iterator Storage\n@author DigixGlobal Pte Ltd\n@notice See: [Doubly Linked List](/DoublyLinkedList)",
        "fullyImplemented": true,
        "id": 21671,
        "linearizedBaseContracts": [
          21671
        ],
        "name": "AddressIteratorStorage",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 21594,
            "libraryName": {
              "contractScope": null,
              "id": 21592,
              "name": "DoublyLinkedList",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 25116,
              "src": "280:16:75",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_DoublyLinkedList_$25116",
                "typeString": "library DoublyLinkedList"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "274:52:75",
            "typeName": {
              "contractScope": null,
              "id": 21593,
              "name": "DoublyLinkedList.Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22602,
              "src": "301:24:75",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                "typeString": "struct DoublyLinkedList.Address"
              }
            }
          },
          {
            "body": {
              "id": 21607,
              "nodeType": "Block",
              "src": "639:37:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21605,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21601,
                      "name": "_item",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21599,
                      "src": "645:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21602,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21596,
                          "src": "653:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21603,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "start_item",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24070,
                        "src": "653:16:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer) view returns (address)"
                        }
                      },
                      "id": 21604,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "653:18:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "645:26:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21606,
                  "nodeType": "ExpressionStatement",
                  "src": "645:26:75"
                }
              ]
            },
            "documentation": "@notice Reads the first item from the list of Address\n@param _list The source list\n@return {\"_item\" : \"The first item from the list\"}",
            "id": 21608,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_first_from_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21596,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21608,
                  "src": "522:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21595,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "522:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "521:40:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21600,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21599,
                  "name": "_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21608,
                  "src": "622:13:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21598,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "622:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "621:15:75"
            },
            "scope": 21671,
            "src": "487:189:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21621,
              "nodeType": "Block",
              "src": "987:35:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21615,
                      "name": "_item",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21613,
                      "src": "993:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21616,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21610,
                          "src": "1001:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21617,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "end_item",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24102,
                        "src": "1001:14:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$returns$_t_address_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer) view returns (address)"
                        }
                      },
                      "id": 21618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1001:16:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "993:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21620,
                  "nodeType": "ExpressionStatement",
                  "src": "993:24:75"
                }
              ]
            },
            "documentation": "@notice Reads the last item from the list of Address\n@param _list The source list\n@return {\"_item\" : \"The last item from the list\"}",
            "id": 21622,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_last_from_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21611,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21610,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21622,
                  "src": "870:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21609,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "870:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "869:40:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21614,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21613,
                  "name": "_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21622,
                  "src": "970:13:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21612,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "970:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "969:15:75"
            },
            "scope": 21671,
            "src": "836:186:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21638,
              "nodeType": "Block",
              "src": "1457:49:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21636,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21631,
                      "name": "_item",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21629,
                      "src": "1463:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21634,
                          "name": "_current_item",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21626,
                          "src": "1487:13:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21632,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21624,
                          "src": "1471:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21633,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "next_item",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24220,
                        "src": "1471:15:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer,address) view returns (address)"
                        }
                      },
                      "id": 21635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1471:30:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1463:38:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21637,
                  "nodeType": "ExpressionStatement",
                  "src": "1463:38:75"
                }
              ]
            },
            "documentation": "@notice Reads the next item on the list of Address\n@param _list The source list\n@param _current_item The current item to be used as base line\n@return {\"_item\" : \"The next item from the list based on the specieid `_current_item`\"}",
            "id": 21639,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_next_from_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21624,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21639,
                  "src": "1317:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21623,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "1317:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21626,
                  "name": "_current_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21639,
                  "src": "1357:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21625,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1357:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1316:63:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21630,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21629,
                  "name": "_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21639,
                  "src": "1440:13:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21628,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1440:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1439:15:75"
            },
            "scope": 21671,
            "src": "1283:223:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21655,
              "nodeType": "Block",
              "src": "1953:53:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21648,
                      "name": "_item",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21646,
                      "src": "1959:5:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21651,
                          "name": "_current_item",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21643,
                          "src": "1987:13:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21649,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21641,
                          "src": "1967:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21650,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "previous_item",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24180,
                        "src": "1967:19:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$_t_address_$returns$_t_address_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer,address) view returns (address)"
                        }
                      },
                      "id": 21652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1967:34:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "1959:42:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 21654,
                  "nodeType": "ExpressionStatement",
                  "src": "1959:42:75"
                }
              ]
            },
            "documentation": "@notice Reads the previous item on the list of Address\n@param _list The source list\n@param _current_item The current item to be used as base line\n@return {\"_item\" : \"The previous item from the list based on the spcified `_current_item`\"}",
            "id": 21656,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_previous_from_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21644,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21641,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21656,
                  "src": "1813:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21640,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "1813:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21643,
                  "name": "_current_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21656,
                  "src": "1853:21:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21642,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1853:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1812:63:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21647,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21646,
                  "name": "_item",
                  "nodeType": "VariableDeclaration",
                  "scope": 21656,
                  "src": "1936:13:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21645,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1936:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1935:15:75"
            },
            "scope": 21671,
            "src": "1775:231:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21669,
              "nodeType": "Block",
              "src": "2324:33:75",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21663,
                      "name": "_count",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21661,
                      "src": "2330:6:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21664,
                          "name": "_list",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21658,
                          "src": "2339:5:75",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                            "typeString": "struct DoublyLinkedList.Address storage pointer"
                          }
                        },
                        "id": 21665,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "total",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 24038,
                        "src": "2339:11:75",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_delegatecall_view$_t_struct$_Address_$22602_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Address_$22602_storage_ptr_$",
                          "typeString": "function (struct DoublyLinkedList.Address storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 21666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2339:13:75",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2330:22:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21668,
                  "nodeType": "ExpressionStatement",
                  "src": "2330:22:75"
                }
              ]
            },
            "documentation": "@notice Reads the list of Address and returns the length of the list\n@param _list The source list\n@return {\"_count\": \"The lenght of the list\"}",
            "id": 21670,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "read_total_addresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21659,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21658,
                  "name": "_list",
                  "nodeType": "VariableDeclaration",
                  "scope": 21670,
                  "src": "2206:38:75",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                    "typeString": "struct DoublyLinkedList.Address"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 21657,
                    "name": "DoublyLinkedList.Address",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22602,
                    "src": "2206:24:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Address_$22602_storage_ptr",
                      "typeString": "struct DoublyLinkedList.Address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2205:40:75"
            },
            "payable": false,
            "returnParameters": {
              "id": 21662,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21661,
                  "name": "_count",
                  "nodeType": "VariableDeclaration",
                  "scope": 21670,
                  "src": "2306:14:75",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21660,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2306:7:75",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2305:16:75"
            },
            "scope": 21671,
            "src": "2176:181:75",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 21672,
        "src": "191:2169:75"
      }
    ],
    "src": "0:2361:75"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.2",
  "updatedAt": "2020-03-13T02:38:46.138Z"
}