{"sources":{"BAToken.sol":{"content":"pragma solidity ^0.4.10;\r\n\r\n/* taking ideas from FirstBlood token */\r\ncontract SafeMath {\r\n\r\n    /* function assert(bool assertion) internal { */\r\n    /*   if (!assertion) { */\r\n    /*     throw; */\r\n    /*   } */\r\n    /* }      // assert no longer needed once solidity is on 0.4.10 */\r\n\r\n    function safeAdd(uint256 x, uint256 y) internal returns(uint256) {\r\n      uint256 z = x + y;\r\n      assert((z >= x) && (z >= y));\r\n      return z;\r\n    }\r\n\r\n    function safeSubtract(uint256 x, uint256 y) internal returns(uint256) {\r\n      assert(x >= y);\r\n      uint256 z = x - y;\r\n      return z;\r\n    }\r\n\r\n    function safeMult(uint256 x, uint256 y) internal returns(uint256) {\r\n      uint256 z = x * y;\r\n      assert((x == 0)||(z/x == y));\r\n      return z;\r\n    }\r\n\r\n}\r\n\r\ncontract Token {\r\n    uint256 public totalSupply;\r\n    function balanceOf(address _owner) constant returns (uint256 balance);\r\n    function transfer(address _to, uint256 _value) returns (bool success);\r\n    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);\r\n    function approve(address _spender, uint256 _value) returns (bool success);\r\n    function allowance(address _owner, address _spender) constant returns (uint256 remaining);\r\n    event Transfer(address indexed _from, address indexed _to, uint256 _value);\r\n    event Approval(address indexed _owner, address indexed _spender, uint256 _value);\r\n}\r\n\r\n\r\n/*  ERC 20 token */\r\ncontract StandardToken is Token {\r\n\r\n    function transfer(address _to, uint256 _value) returns (bool success) {\r\n      if (balances[msg.sender] >= _value && _value > 0) {\r\n        balances[msg.sender] -= _value;\r\n        balances[_to] += _value;\r\n        Transfer(msg.sender, _to, _value);\r\n        return true;\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {\r\n      if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {\r\n        balances[_to] += _value;\r\n        balances[_from] -= _value;\r\n        allowed[_from][msg.sender] -= _value;\r\n        Transfer(_from, _to, _value);\r\n        return true;\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    function balanceOf(address _owner) constant returns (uint256 balance) {\r\n        return balances[_owner];\r\n    }\r\n\r\n    function approve(address _spender, uint256 _value) returns (bool success) {\r\n        allowed[msg.sender][_spender] = _value;\r\n        Approval(msg.sender, _spender, _value);\r\n        return true;\r\n    }\r\n\r\n    function allowance(address _owner, address _spender) constant returns (uint256 remaining) {\r\n      return allowed[_owner][_spender];\r\n    }\r\n\r\n    mapping (address => uint256) balances;\r\n    mapping (address => mapping (address => uint256)) allowed;\r\n}\r\n\r\ncontract BAToken is StandardToken, SafeMath {\r\n\r\n    // metadata\r\n    string public constant name = \"Basic Attention Token\";\r\n    string public constant symbol = \"BAT\";\r\n    uint256 public constant decimals = 18;\r\n    string public version = \"1.0\";\r\n\r\n    // contracts\r\n    address public ethFundDeposit;      // deposit address for ETH for Brave International\r\n    address public batFundDeposit;      // deposit address for Brave International use and BAT User Fund\r\n\r\n    // crowdsale parameters\r\n    bool public isFinalized;              // switched to true in operational state\r\n    uint256 public fundingStartBlock;\r\n    uint256 public fundingEndBlock;\r\n    uint256 public constant batFund = 500 * (10**6) * 10**decimals;   // 500m BAT reserved for Brave Intl use\r\n    uint256 public constant tokenExchangeRate = 6400; // 6400 BAT tokens per 1 ETH\r\n    uint256 public constant tokenCreationCap =  1500 * (10**6) * 10**decimals;\r\n    uint256 public constant tokenCreationMin =  675 * (10**6) * 10**decimals;\r\n\r\n\r\n    // events\r\n    event LogRefund(address indexed _to, uint256 _value);\r\n    event CreateBAT(address indexed _to, uint256 _value);\r\n\r\n    // constructor\r\n    function BAToken(\r\n        address _ethFundDeposit,\r\n        address _batFundDeposit,\r\n        uint256 _fundingStartBlock,\r\n        uint256 _fundingEndBlock)\r\n    {\r\n      isFinalized = false;                   //controls pre through crowdsale state\r\n      ethFundDeposit = _ethFundDeposit;\r\n      batFundDeposit = _batFundDeposit;\r\n      fundingStartBlock = _fundingStartBlock;\r\n      fundingEndBlock = _fundingEndBlock;\r\n      totalSupply = batFund;\r\n      balances[batFundDeposit] = batFund;    // Deposit Brave Intl share\r\n      CreateBAT(batFundDeposit, batFund);  // logs Brave Intl fund\r\n    }\r\n\r\n    /// @dev Accepts ether and creates new BAT tokens.\r\n    function createTokens() payable external {\r\n      if (isFinalized) throw;\r\n      if (block.number < fundingStartBlock) throw;\r\n      if (block.number > fundingEndBlock) throw;\r\n      if (msg.value == 0) throw;\r\n\r\n      uint256 tokens = safeMult(msg.value, tokenExchangeRate); // check that we're not over totals\r\n      uint256 checkedSupply = safeAdd(totalSupply, tokens);\r\n\r\n      // return money if something goes wrong\r\n      if (tokenCreationCap < checkedSupply) throw;  // odd fractions won't be found\r\n\r\n      totalSupply = checkedSupply;\r\n      balances[msg.sender] += tokens;  // safeAdd not needed; bad semantics to use here\r\n      CreateBAT(msg.sender, tokens);  // logs token creation\r\n    }\r\n\r\n    /// @dev Ends the funding period and sends the ETH home\r\n    function finalize() external {\r\n      if (isFinalized) throw;\r\n      if (msg.sender != ethFundDeposit) throw; // locks finalize to the ultimate ETH owner\r\n      if(totalSupply < tokenCreationMin) throw;      // have to sell minimum to move to operational\r\n      if(block.number <= fundingEndBlock && totalSupply != tokenCreationCap) throw;\r\n      // move to operational\r\n      isFinalized = true;\r\n      if(!ethFundDeposit.send(this.balance)) throw;  // send the eth to Brave International\r\n    }\r\n\r\n    /// @dev Allows contributors to recover their ether in the case of a failed funding campaign.\r\n    function refund() external {\r\n      if(isFinalized) throw;                       // prevents refund if operational\r\n      if (block.number <= fundingEndBlock) throw; // prevents refund until sale period is over\r\n      if(totalSupply >= tokenCreationMin) throw;  // no refunds if we sold enough\r\n      if(msg.sender == batFundDeposit) throw;    // Brave Intl not entitled to a refund\r\n      uint256 batVal = balances[msg.sender];\r\n      if (batVal == 0) throw;\r\n      balances[msg.sender] = 0;\r\n      totalSupply = safeSubtract(totalSupply, batVal); // extra safe\r\n      uint256 ethVal = batVal / tokenExchangeRate;     // should be safe; previous throws covers edges\r\n      LogRefund(msg.sender, ethVal);               // log it \r\n      if (!msg.sender.send(ethVal)) throw;       // if you're using a contract; make sure it works with .send gas limits\r\n    }\r\n\r\n}"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.4.10+commit.f0d539ae","compilerSettings":{"libraries":{},"optimizer":{"runs":200,"enabled":true}},"name":"BAToken","fullyQualifiedName":"BAToken.sol:BAToken"},"runtimeBytecode":{"onchainBytecode":"0x6060604052361561010c5763ffffffff60e060020a60003504166301a7a8c0811461010e57806306fdde031461013a578063095ea7b3146101ca57806318160ddd146101fd578063229a49781461021f57806323b872dd14610241578063313ce5671461027a5780634172d0801461029c5780634bb278f3146102be57806354fd4d50146102d0578063590e1ae3146103605780636f7920fd1461037257806370a08231146103945780638d4e4083146103c257806391b43d13146103e657806395d89b4114610408578063a81c3bdf14610498578063a9059cbb146104c4578063b4427263146104f7578063c039daf614610501578063d648a64714610523578063dd62ed3e14610545575bfe5b341561011657fe5b61011e610579565b60408051600160a060020a039092168252519081900360200190f35b341561014257fe5b61014a610588565b604080516020808252835181830152835191928392908301918501908083838215610190575b80518252602083111561019057601f199092019160209182019101610170565b505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d257fe5b6101e9600160a060020a03600435166024356105bf565b604080519115158252519081900360200190f35b341561020557fe5b61020d61062a565b60408051918252519081900360200190f35b341561022757fe5b61020d610630565b60408051918252519081900360200190f35b341561024957fe5b6101e9600160a060020a0360043581169060243516604435610640565b604080519115158252519081900360200190f35b341561028257fe5b61020d610736565b60408051918252519081900360200190f35b34156102a457fe5b61020d61073b565b60408051918252519081900360200190f35b34156102c657fe5b6102ce610741565b005b34156102d857fe5b61014a61081a565b604080516020808252835181830152835191928392908301918501908083838215610190575b80518252602083111561019057601f199092019160209182019101610170565b505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036857fe5b6102ce6108a8565b005b341561037a57fe5b61020d6109dd565b60408051918252519081900360200190f35b341561039c57fe5b61020d600160a060020a03600435166109ed565b60408051918252519081900360200190f35b34156103ca57fe5b6101e9610a0c565b604080519115158252519081900360200190f35b34156103ee57fe5b61020d610a1c565b60408051918252519081900360200190f35b341561041057fe5b61014a610a22565b604080516020808252835181830152835191928392908301918501908083838215610190575b80518252602083111561019057601f199092019160209182019101610170565b505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104a057fe5b61011e610a59565b60408051600160a060020a039092168252519081900360200190f35b34156104cc57fe5b6101e9600160a060020a0360043516602435610a68565b604080519115158252519081900360200190f35b6102ce610b14565b005b341561050957fe5b61020d610bf3565b60408051918252519081900360200190f35b341561052b57fe5b61020d610c03565b60408051918252519081900360200190f35b341561054d57fe5b61020d600160a060020a0360043581169060243516610c09565b60408051918252519081900360200190f35b600554600160a060020a031681565b60408051808201909152601581527f426173696320417474656e74696f6e20546f6b656e0000000000000000000000602082015281565b600160a060020a03338116600081815260026020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60005481565b6b019d971e4fe8401e7400000081565b600160a060020a0383166000908152600160205260408120548290108015906106905750600160a060020a0380851660009081526002602090815260408083203390941683529290522054829010155b801561069c5750600082115b1561072a57600160a060020a03808416600081815260016020908152604080832080548801905588851680845281842080548990039055600283528184203390961684529482529182902080548790039055815186815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600161072e565b5060005b5b9392505050565b601281565b61190081565b60055460a060020a900460ff16156107595760006000fd5b60045433600160a060020a039081169116146107755760006000fd5b6000546b022e58cf5246568f830000009010156107925760006000fd5b60075443111580156107b257506000546b04d8c55aefb8c05b5c00000014155b156107bd5760006000fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a179055600454604051600160a060020a039182169130163180156108fc02916000818181858888f1935050505015156108175760006000fd5b5b565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108a05780601f10610875576101008083540402835291602001916108a0565b820191906000526020600020905b81548152906001019060200180831161088357829003601f168201915b505050505081565b600554600090819060a060020a900460ff16156108c55760006000fd5b60075443116108d45760006000fd5b6000546b022e58cf5246568f8300000090106108f05760006000fd5b60055433600160a060020a039081169116141561090d5760006000fd5b600160a060020a03331660009081526001602052604090205491508115156109355760006000fd5b600160a060020a03331660009081526001602052604081208190555461095b9083610c36565b600055611900825b04905033600160a060020a03167fb6c0eca8138e097d71e2dd31e19a1266487f0553f170b7260ffe68bcbe9ff8a7826040518082815260200191505060405180910390a2604051600160a060020a0333169082156108fc029083906000818181858888f1935050505015156109d85760006000fd5b5b5050565b6b04d8c55aefb8c05b5c00000081565b600160a060020a0381166000908152600160205260409020545b919050565b60055460a060020a900460ff1681565b60075481565b60408051808201909152600381527f4241540000000000000000000000000000000000000000000000000000000000602082015281565b600454600160a060020a031681565b600160a060020a033316600090815260016020526040812054829010801590610a915750600082115b15610b0557600160a060020a03338116600081815260016020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610624565b506000610624565b5b92915050565b600554600090819060a060020a900460ff1615610b315760006000fd5b600654431015610b415760006000fd5b600754431115610b515760006000fd5b341515610b5e5760006000fd5b610b6a34611900610c51565b9150610b7860005483610c80565b90506b04d8c55aefb8c05b5c00000081901015610b955760006000fd5b6000818155600160a060020a033316808252600160209081526040928390208054860190558251858152925191927fb33527d2e0d30b7aece2c5e82927985866c1b75173d671c14f4457bf67aa6910929081900390910190a25b5050565b6b022e58cf5246568f8300000081565b60065481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60008082841015610c4357fe5b5050808203805b5092915050565b6000828202831580610c6d5750828482811515610c6a57fe5b04145b1515610c7557fe5b8091505b5092915050565b6000828201838110801590610c6d5750828110155b1515610c7557fe5b8091505b50929150505600a165627a7a72305820e7d550d22cfb06e8da1efe14627217183e846b5986b9bac6199503c4780b03d70029","recompiledBytecode":"0x6060604052361561010c5763ffffffff60e060020a60003504166301a7a8c0811461010e57806306fdde031461013a578063095ea7b3146101ca57806318160ddd146101fd578063229a49781461021f57806323b872dd14610241578063313ce5671461027a5780634172d0801461029c5780634bb278f3146102be57806354fd4d50146102d0578063590e1ae3146103605780636f7920fd1461037257806370a08231146103945780638d4e4083146103c257806391b43d13146103e657806395d89b4114610408578063a81c3bdf14610498578063a9059cbb146104c4578063b4427263146104f7578063c039daf614610501578063d648a64714610523578063dd62ed3e14610545575bfe5b341561011657fe5b61011e610579565b60408051600160a060020a039092168252519081900360200190f35b341561014257fe5b61014a610588565b604080516020808252835181830152835191928392908301918501908083838215610190575b80518252602083111561019057601f199092019160209182019101610170565b505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d257fe5b6101e9600160a060020a03600435166024356105bf565b604080519115158252519081900360200190f35b341561020557fe5b61020d61062a565b60408051918252519081900360200190f35b341561022757fe5b61020d610630565b60408051918252519081900360200190f35b341561024957fe5b6101e9600160a060020a0360043581169060243516604435610640565b604080519115158252519081900360200190f35b341561028257fe5b61020d610736565b60408051918252519081900360200190f35b34156102a457fe5b61020d61073b565b60408051918252519081900360200190f35b34156102c657fe5b6102ce610741565b005b34156102d857fe5b61014a61081a565b604080516020808252835181830152835191928392908301918501908083838215610190575b80518252602083111561019057601f199092019160209182019101610170565b505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036857fe5b6102ce6108a8565b005b341561037a57fe5b61020d6109dd565b60408051918252519081900360200190f35b341561039c57fe5b61020d600160a060020a03600435166109ed565b60408051918252519081900360200190f35b34156103ca57fe5b6101e9610a0c565b604080519115158252519081900360200190f35b34156103ee57fe5b61020d610a1c565b60408051918252519081900360200190f35b341561041057fe5b61014a610a22565b604080516020808252835181830152835191928392908301918501908083838215610190575b80518252602083111561019057601f199092019160209182019101610170565b505050905090810190601f1680156101bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104a057fe5b61011e610a59565b60408051600160a060020a039092168252519081900360200190f35b34156104cc57fe5b6101e9600160a060020a0360043516602435610a68565b604080519115158252519081900360200190f35b6102ce610b14565b005b341561050957fe5b61020d610bf3565b60408051918252519081900360200190f35b341561052b57fe5b61020d610c03565b60408051918252519081900360200190f35b341561054d57fe5b61020d600160a060020a0360043581169060243516610c09565b60408051918252519081900360200190f35b600554600160a060020a031681565b60408051808201909152601581527f426173696320417474656e74696f6e20546f6b656e0000000000000000000000602082015281565b600160a060020a03338116600081815260026020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60005481565b6b019d971e4fe8401e7400000081565b600160a060020a0383166000908152600160205260408120548290108015906106905750600160a060020a0380851660009081526002602090815260408083203390941683529290522054829010155b801561069c5750600082115b1561072a57600160a060020a03808416600081815260016020908152604080832080548801905588851680845281842080548990039055600283528184203390961684529482529182902080548790039055815186815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350600161072e565b5060005b5b9392505050565b601281565b61190081565b60055460a060020a900460ff16156107595760006000fd5b60045433600160a060020a039081169116146107755760006000fd5b6000546b022e58cf5246568f830000009010156107925760006000fd5b60075443111580156107b257506000546b04d8c55aefb8c05b5c00000014155b156107bd5760006000fd5b6005805474ff0000000000000000000000000000000000000000191660a060020a179055600454604051600160a060020a039182169130163180156108fc02916000818181858888f1935050505015156108175760006000fd5b5b565b6003805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108a05780601f10610875576101008083540402835291602001916108a0565b820191906000526020600020905b81548152906001019060200180831161088357829003601f168201915b505050505081565b600554600090819060a060020a900460ff16156108c55760006000fd5b60075443116108d45760006000fd5b6000546b022e58cf5246568f8300000090106108f05760006000fd5b60055433600160a060020a039081169116141561090d5760006000fd5b600160a060020a03331660009081526001602052604090205491508115156109355760006000fd5b600160a060020a03331660009081526001602052604081208190555461095b9083610c36565b600055611900825b04905033600160a060020a03167fb6c0eca8138e097d71e2dd31e19a1266487f0553f170b7260ffe68bcbe9ff8a7826040518082815260200191505060405180910390a2604051600160a060020a0333169082156108fc029083906000818181858888f1935050505015156109d85760006000fd5b5b5050565b6b04d8c55aefb8c05b5c00000081565b600160a060020a0381166000908152600160205260409020545b919050565b60055460a060020a900460ff1681565b60075481565b60408051808201909152600381527f4241540000000000000000000000000000000000000000000000000000000000602082015281565b600454600160a060020a031681565b600160a060020a033316600090815260016020526040812054829010801590610a915750600082115b15610b0557600160a060020a03338116600081815260016020908152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3506001610624565b506000610624565b5b92915050565b600554600090819060a060020a900460ff1615610b315760006000fd5b600654431015610b415760006000fd5b600754431115610b515760006000fd5b341515610b5e5760006000fd5b610b6a34611900610c51565b9150610b7860005483610c80565b90506b04d8c55aefb8c05b5c00000081901015610b955760006000fd5b6000818155600160a060020a033316808252600160209081526040928390208054860190558251858152925191927fb33527d2e0d30b7aece2c5e82927985866c1b75173d671c14f4457bf67aa6910929081900390910190a25b5050565b6b022e58cf5246568f8300000081565b60065481565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60008082841015610c4357fe5b5050808203805b5092915050565b6000828202831580610c6d5750828482811515610c6a57fe5b04145b1515610c7557fe5b8091505b5092915050565b6000828201838110801590610c6d5750828110155b1515610c7557fe5b8091505b50929150505600a165627a7a723058209fb0f43cf72240853c4a600485178124c1787552530c87af218ed959b89ae08e0029","sourceMap":"2825:4077:0:-;;;;;;;;-1:-1:-1;;;2825:4077:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3191:29;;;;;;;;;;;;;;-1:-1:-1;;;;;3191:29:0;;;;;;;;;;;;;;2895:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18:2:-1;;13:3;7:5;32;59:3;53:5;48:3;41:6;93:2;88:3;85:2;78:6;73:3;67:5;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2359:202:0;;;;;;;;-1:-1:-1;;;;;2359:202:0;;;;;;;;;;;;;;;;;;;;;;;;;791:26;;;;;;;;;;;;;;;;;;;;;;;;;;3488:62;;;;;;;;;;;;;;;;;;;;;;;;;;1814:417;;;;;;;;-1:-1:-1;;;;;1814:417:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2999:37;;;;;;;;;;;;;;;;;;;;;;;;;;3599:48;;;;;;;;;;;;;;;;;;;;;;;;;;5436:496;;;;;;;;;;;;3043:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18:2:-1;;13:3;7:5;32;59:3;53:5;48:3;41:6;93:2;88:3;85:2;78:6;73:3;67:5;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6039:858:0;;;;;;;;;;;;3683:73;;;;;;;;;;;;;;;;;;;;;;;;;;2239:112;;;;;;;;-1:-1:-1;;;;;2239:112:0;;;;;;;;;;;;;;;;;;;;;3328:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;3451:30;;;;;;;;;;;;;;;;;;;;;;;;;;2955:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18:2:-1;;13:3;7:5;32;59:3;53:5;48:3;41:6;93:2;88:3;85:2;78:6;73:3;67:5;-1:-1;;152:3;;;;117:2;108:3;;;;130;172:5;167:4;181:3;3:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3099:29:0;;;;;;;;;;;;;;-1:-1:-1;;;;;3099:29:0;;;;;;;;;;;;;;1480:326;;;;;;;;-1:-1:-1;;;;;1480:326:0;;;;;;;;;;;;;;;;;;;;;;;;;4665:702;;;;;;3763:72;;;;;;;;;;;;;;;;;;;;;;;;;;3412:32;;;;;;;;;;;;;;;;;;;;;;;;;;2569:139;;;;;;;;-1:-1:-1;;;;;2569:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;3191:29;;;-1:-1:-1;;;;;3191:29:0;;:::o;2895:53::-;;;;;;;;;;;;;;;;;;;:::o;2359:202::-;-1:-1:-1;;;;;2452:10:0;2444:19;;2419:12;2444:19;;;:7;:19;;;;;;;;:29;;;;;;;;;;;;:38;;;2493;;;;;;;2419:12;;2444:29;:19;2493:38;;;;;;;;;;;-1:-1:-1;2549:4:0;2359:202;;;;;:::o;791:26::-;;;;:::o;3488:62::-;3522:28;3488:62;:::o;1814:417::-;-1:-1:-1;;;;;1916:15:0;;1889:12;1916:15;;;:8;:15;;;;;;:25;;;;;;:65;;-1:-1:-1;;;;;;1945:14:0;;;;;;;:7;:14;;;;;;;;1960:10;1945:26;;;;;;;;;;:36;;;;1916:65;:79;;;;;1994:1;1985:6;:10;1916:79;1912:312;;;-1:-1:-1;;;;;2008:13:0;;;;;;;:8;:13;;;;;;;;:23;;;;;;2042:15;;;;;;;;;:25;;;;;;;2078:7;:14;;;;;2093:10;2078:26;;;;;;;;;;;;:36;;;;;;;2125:28;;;;;;;2008:13;;2042:15;2125:28;;;;;;;;;;-1:-1:-1;2171:4:0;2164:11;;1912:312;-1:-1:-1;2209:5:0;1912:312;1814:417;;;;;;:::o;2999:37::-;3034:2;2999:37;:::o;3599:48::-;3643:4;3599:48;:::o;5436:496::-;5478:11;;-1:-1:-1;;;5478:11:0;;;;5474:22;;;5491:5;;;5474:22;5523:14;;5509:10;-1:-1:-1;;;;;5509:28:0;;;5523:14;;5509:28;5505:39;;5539:5;;;5505:39;5600:11;;3807:28;5600:30;;5597:40;;;5632:5;;;5597:40;5717:15;;5701:12;:31;;:66;;;;-1:-1:-1;5736:11:0;;3727:29;5736:31;;5701:66;5698:76;;;5769:5;;;5698:76;5813:11;:18;;-1:-1:-1;;5813:18:0;-1:-1:-1;;;5813:18:0;;;5844:14;;:33;;-1:-1:-1;;;;;5844:14:0;;;;5864:4;:12;;5844:33;;;;;5813:18;5844:33;5813:18;5844:33;5864:12;5844:14;:33;;;;;;;5843:34;5840:44;;;5879:5;;;5840:44;5436:496;:::o;3043:29::-;;;;;;;;;;;;;;;-1:-1:-1;;3043:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6039:858::-;6078:11;;6429:14;;;;-1:-1:-1;;;6078:11:0;;;;6075:21;;;6091:5;;;6075:21;6181:15;;6165:12;:31;6161:42;;6198:5;;;6161:42;6260:11;;3807:28;6260:31;;6257:41;;6293:5;;;6257:41;6357:14;;6343:10;-1:-1:-1;;;;;6343:28:0;;;6357:14;;6343:28;6340:38;;;6373:5;;;6340:38;-1:-1:-1;;;;;6455:10:0;6446:20;;;;;:8;:20;;;;;;;-1:-1:-1;6479:11:0;;6475:22;;;6492:5;;;6475:22;-1:-1:-1;;;;;6515:10:0;6506:20;6529:1;6506:20;;;:8;:20;;;;;:24;;;6566:11;6553:33;;6579:6;6553:12;:33::i;:::-;6539:11;:47;3643:4;6626:6;:26;;6609:43;;6723:10;-1:-1:-1;;;;;6713:29:0;;6735:6;6713:29;;;;;;;;;;;;;;;;;;6781:23;;-1:-1:-1;;;;;6781:10:0;:15;;:23;;;;;6797:6;;6781:23;;;;6797:6;6781:15;:23;;;;;;;6780:24;6776:35;;;6806:5;;;6776:35;6039:858;;;:::o;3683:73::-;3727:29;3683:73;:::o;2239:112::-;-1:-1:-1;;;;;2327:16:0;;2292:15;2327:16;;;:8;:16;;;;;;2239:112;;;;:::o;3328:23::-;;;-1:-1:-1;;;3328:23:0;;;;;:::o;3451:30::-;;;;:::o;2955:37::-;;;;;;;;;;;;;;;;;;;:::o;3099:29::-;;;-1:-1:-1;;;;;3099:29:0;;:::o;1480:326::-;-1:-1:-1;;;;;1572:10:0;1563:20;1536:12;1563:20;;;:8;:20;;;;;;:30;;;;;;:44;;;1606:1;1597:6;:10;1563:44;1559:240;;;-1:-1:-1;;;;;1629:10:0;1620:20;;;;;;:8;:20;;;;;;;;:30;;;;;;;1661:13;;;;;;;;;;:23;;;;;;1695:33;;;;;;;1661:13;;1695:33;;;;;;;;;;;-1:-1:-1;1746:4:0;1739:11;;1559:240;-1:-1:-1;1784:5:0;1777:12;;1559:240;1480:326;;;;;:::o;4665:702::-;4719:11;;4884:14;;;;-1:-1:-1;;;4719:11:0;;;;4715:22;;;4732:5;;;4715:22;4765:17;;4750:12;:32;4746:43;;;4784:5;;;4746:43;4817:15;;4802:12;:30;4798:41;;;4834:5;;;4798:41;4852:9;:14;4848:25;;;4868:5;;;4848:25;4901:38;4910:9;3643:4;4901:8;:38::i;:::-;4884:55;;5008:28;5016:11;;5029:6;5008:7;:28::i;:::-;4984:52;-1:-1:-1;3727:29:0;5098:32;;;5094:43;;;5132:5;;;5094:43;5181:11;:27;;;-1:-1:-1;;;;;5226:10:0;5217:20;;;;:8;:20;;;;;;;;;:30;;;;;;5306:29;;;;;;;5217:20;;5306:29;;;;;;;;;;;4665:702;;;:::o;3763:72::-;3807:28;3763:72;:::o;3412:32::-;;;;:::o;2569:139::-;-1:-1:-1;;;;;2675:15:0;;;2640:17;2675:15;;;:7;:15;;;;;;;;:25;;;;;;;;;;2569:139;;;;;:::o;454:144::-;515:7;;540:6;;;;533:14;;;;-1:-1:-1;;568:5:0;;;;454:144;;;;;;:::o;606:154::-;663:7;693:5;;;715:6;;;714:20;;;732:1;727;725;:3;;;;;;;;:8;714:20;707:28;;;;;;751:1;744:8;;606:154;;;;;;:::o;293:153::-;349:7;379:5;;;401:6;;;;;;400:20;;;418:1;413;:6;;400:20;393:28;;;;;;437:1;430:8;;293:153;;;;;;:::o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa165627a7a723058209fb0f43cf72240853c4a600485178124c1787552530c87af218ed959b89ae08e0029","offset":3241}},"immutableReferences":{},"transformations":[{"id":"1","type":"replace","offset":3241,"reason":"cborAuxdata"}],"transformationValues":{"cborAuxdata":{"1":"0xa165627a7a72305820e7d550d22cfb06e8da1efe14627217183e846b5986b9bac6199503c4780b03d70029"}}},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"deployment":{"transactionHash":"0x3bf792736cea9760b7cb604dc5b6527f5b9ddd3d3f7db046fa4103ac489d7626","blockNumber":"3788558","transactionIndex":"38","deployer":"0x3095a47305EFD248f6ce272C2dB01297A91E8C41"},"matchId":"26506259","creationMatch":"match","runtimeMatch":"match","verifiedAt":"2026-03-24T15:29:27Z","match":"match","chainId":"1","address":"0x0D8775F648430679A709E98d2b0Cb6250d2887EF"}