Rendering: 88%
x
583
1099
{ parameter (or (pair %spawn (address %token_admin) (pair (address %ir_admin) (pair (address %irs_admin) (pair (address %ctr_admin) (pair (address %tir_admin) (pair (address %mc_admin) (pair (address %ca_admin) (pair (address %owner) (pair (address %identity_factory) (pair (string %token_name) (pair (string %token_symbol) (pair (nat %token_decimals) (pair (string %token_version) (pair (address %token_onchain_id) (pair (set %claim_topics nat) (pair (set %allowed_countries nat) (list %trusted_issuers (pair key (pair (set %topics nat) (address %claim_issuer)))))))))))))))))))) (pair %finalize (address %irs) (pair (address %ir) (pair (address %mc) (pair (address %country_allow) (pair (address %token) (pair (address %irs_admin) (pair (address %mc_admin) (address %owner))))))))) ; storage (pair (nat %spawn_count) (big_map %stacks nat (pair (address %token) (pair (address %ir) (pair (address %irs) (pair (address %ctr) (pair (address %tir) (pair (address %mc) (pair (address %country_allow) (pair (address %owner) (pair (address %spawned_by) (timestamp %spawned_at)))))))))))) ; code { UNPAIR ; IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; NEQ ; IF { PUSH string "SPAWNER_NO_TEZ" ; FAILWITH } {} ; SELF_ADDRESS ; DUP 2 ; GET 15 ; DUP 3 ; GET 7 ; DUP 4 ; GET 29 ; PAIR 3 ; PUSH mutez 0 ; NONE key_hash ; CREATE_CONTRACT { parameter (or (pair %addClaimTopic (address %caller_alias) (nat %topic)) (or (pair %removeClaimTopic (address %caller_alias) (nat %topic)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (address %setAdmin)))) ; storage (pair (set %topics nat) (pair (address %admin) (address %owner))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; SWAP ; DUP ; CAR ; PUSH bool True ; DIG 3 ; CDR ; UPDATE ; UPDATE 1 } { IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; CAR ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "TOPIC_NOT_FOUND" ; FAILWITH } ; SWAP ; DUP ; CAR ; PUSH bool False ; DIG 3 ; CDR ; UPDATE ; UPDATE 1 } { IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 4 } { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; UPDATE 3 } } } ; NIL operation ; PAIR } ; view "getClaimTopics" unit (set nat) { GET 3 } ; view "hasClaimTopic" nat bool { UNPAIR ; SWAP ; CAR ; SWAP ; MEM } } ; DUP 4 ; GET 15 ; DUP 5 ; GET 9 ; EMPTY_BIG_MAP key (pair (set nat) address) ; DUP 7 ; GET 32 ; ITER { UNPAIR ; SWAP ; SOME ; SWAP ; UPDATE } ; PAIR 3 ; PUSH mutez 0 ; NONE key_hash ; CREATE_CONTRACT { parameter (or (pair %addTrustedIssuer (address %caller_alias) (pair (key %issuer_sppk) (pair (set %topics nat) (address %claim_issuer)))) (or (pair %removeTrustedIssuer (address %caller_alias) (key %issuer_sppk)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (or (pair %updateIssuerClaimTopics (address %caller_alias) (pair (key %issuer_sppk) (pair (set %new_topics nat) (address %claim_issuer)))) (address %setAdmin))))) ; storage (pair (big_map %issuers key (pair (set %topics nat) (address %claim_issuer))) (pair (address %admin) (address %owner))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; CAR ; DUP 2 ; GET 3 ; MEM ; IF { PUSH string "ISSUER_ALREADY_TRUSTED" ; FAILWITH } {} ; SWAP ; DUP ; CAR ; DUP 3 ; GET 6 ; DUP 4 ; GET 5 ; PAIR ; SOME ; DIG 3 ; GET 3 ; UPDATE ; UPDATE 1 } { IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; CAR ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "ISSUER_NOT_TRUSTED" ; FAILWITH } ; SWAP ; DUP ; CAR ; NONE (pair (set nat) address) ; DIG 3 ; CDR ; UPDATE ; UPDATE 1 } { IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 4 } { IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; CAR ; DUP 2 ; GET 3 ; MEM ; IF {} { PUSH string "ISSUER_NOT_TRUSTED" ; FAILWITH } ; SWAP ; DUP ; CAR ; DUP 3 ; GET 6 ; DUP 4 ; GET 5 ; PAIR ; SOME ; DIG 3 ; GET 3 ; UPDATE ; UPDATE 1 } { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; UPDATE 3 } } } } ; NIL operation ; PAIR } ; view "isTrustedIssuer" key bool { UNPAIR ; SWAP ; CAR ; SWAP ; MEM } ; view "isTrustedIssuerForTopic" (pair key nat) bool { UNPAIR ; UNPAIR ; DIG 2 ; CAR ; SWAP ; GET ; IF_NONE { DROP ; PUSH bool False } { CAR ; SWAP ; MEM } } ; view "getTopicsForIssuer" key (set nat) { UNPAIR ; SWAP ; CAR ; SWAP ; GET ; IF_NONE { PUSH string "ISSUER_NOT_TRUSTED" ; FAILWITH } { CAR } } ; view "getClaimIssuerForTopic" (pair key nat) (option address) { UNPAIR ; UNPAIR ; DIG 2 ; CAR ; SWAP ; GET ; IF_NONE { DROP ; NONE address } { DUP ; CAR ; DIG 2 ; MEM ; IF { CDR ; SOME } { DROP ; NONE address } } } ; view "getIssuerEntry" key (pair (set %topics nat) (address %claim_issuer)) { UNPAIR ; SWAP ; CAR ; SWAP ; GET ; IF_NONE { PUSH string "ISSUER_NOT_TRUSTED" ; FAILWITH } {} } } ; DUP 6 ; GET 15 ; DUP 6 ; EMPTY_SET address ; EMPTY_BIG_MAP address nat ; EMPTY_BIG_MAP address address ; PAIR 5 ; PUSH mutez 0 ; NONE key_hash ; CREATE_CONTRACT { parameter (or (pair %bindIR (address %caller_alias) (address %ir_kt1)) (or (pair %unbindIR (address %caller_alias) (address %ir_kt1)) (or (pair %registerInvestor (address %caller_alias) (pair (address %investor) (pair (address %identity_kt1) (nat %country)))) (or (pair %updateIdentity (address %caller_alias) (pair (address %investor) (address %new_identity_kt1))) (or (pair %updateCountry (address %caller_alias) (pair (address %investor) (nat %new_country))) (or (pair %removeIdentity (address %caller_alias) (address %investor)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (address %setAdmin)))))))) ; storage (pair (big_map %identities address address) (pair (big_map %countries address nat) (pair (set %bound_irs address) (pair (address %admin) (address %owner))))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 8 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; SWAP ; DUP ; GET 5 ; PUSH bool True ; DIG 3 ; CDR ; UPDATE ; UPDATE 5 } { IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 8 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 5 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "IR_NOT_BOUND" ; FAILWITH } ; SWAP ; DUP ; GET 5 ; PUSH bool False ; DIG 3 ; CDR ; UPDATE ; UPDATE 5 } { IF_LEFT { SENDER ; DUP 3 ; GET 7 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 5 ; SWAP ; MEM ; IF {} { PUSH string "NOT_ADMIN_OR_BOUND_IR" ; FAILWITH } } ; DUP 2 ; GET 5 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NOT_BOUND_IR" ; FAILWITH } ; DUP 2 ; CAR ; DUP 2 ; GET 3 ; MEM ; IF { PUSH string "ALREADY_REGISTERED" ; FAILWITH } {} ; DUP 2 ; DUP 3 ; CAR ; DUP 3 ; GET 5 ; SOME ; DUP 4 ; GET 3 ; UPDATE ; UPDATE 1 ; DIG 2 ; GET 3 ; DUP 3 ; GET 6 ; SOME ; DIG 3 ; GET 3 ; UPDATE ; UPDATE 3 } { IF_LEFT { SENDER ; DUP 3 ; GET 7 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 5 ; SWAP ; MEM ; IF {} { PUSH string "NOT_ADMIN_OR_BOUND_IR" ; FAILWITH } } ; DUP 2 ; GET 5 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NOT_BOUND_IR" ; FAILWITH } ; DUP 2 ; CAR ; DUP 2 ; GET 3 ; MEM ; IF {} { PUSH string "NOT_REGISTERED" ; FAILWITH } ; SWAP ; DUP ; CAR ; DUP 3 ; GET 4 ; SOME ; DIG 3 ; GET 3 ; UPDATE ; UPDATE 1 } { IF_LEFT { SENDER ; DUP 3 ; GET 7 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 5 ; SWAP ; MEM ; IF {} { PUSH string "NOT_ADMIN_OR_BOUND_IR" ; FAILWITH } } ; DUP 2 ; GET 5 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NOT_BOUND_IR" ; FAILWITH } ; DUP 2 ; CAR ; DUP 2 ; GET 3 ; MEM ; IF {} { PUSH string "NOT_REGISTERED" ; FAILWITH } ; SWAP ; DUP ; GET 3 ; DUP 3 ; GET 4 ; SOME ; DIG 3 ; GET 3 ; UPDATE ; UPDATE 3 } { IF_LEFT { SENDER ; DUP 3 ; GET 7 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 5 ; SWAP ; MEM ; IF {} { PUSH string "NOT_ADMIN_OR_BOUND_IR" ; FAILWITH } } ; DUP 2 ; GET 5 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NOT_BOUND_IR" ; FAILWITH } ; DUP 2 ; CAR ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "NOT_REGISTERED" ; FAILWITH } ; DUP 2 ; DUP 3 ; CAR ; NONE address ; DUP 4 ; CDR ; UPDATE ; UPDATE 1 ; DIG 2 ; GET 3 ; NONE nat ; DIG 3 ; CDR ; UPDATE ; UPDATE 3 } { IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 8 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 8 } { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; UPDATE 7 } } } } } } } ; NIL operation ; PAIR } ; view "identityOf" address address { UNPAIR ; SWAP ; CAR ; SWAP ; GET ; IF_NONE { PUSH string "NOT_REGISTERED" ; FAILWITH } {} } ; view "countryOf" address nat { UNPAIR ; SWAP ; GET 3 ; SWAP ; GET ; IF_NONE { PUSH string "NOT_REGISTERED" ; FAILWITH } {} } ; view "isStored" address bool { UNPAIR ; SWAP ; CAR ; SWAP ; MEM } ; view "isBoundIR" address bool { UNPAIR ; SWAP ; GET 5 ; SWAP ; MEM } } ; DUP 8 ; GET 15 ; DUP 9 ; GET 3 ; EMPTY_BIG_MAP address unit ; DUP 11 ; GET 17 ; DUP 8 ; DUP 11 ; DUP 8 ; PAIR 7 ; PUSH mutez 0 ; NONE key_hash ; CREATE_CONTRACT { parameter (or (pair %addAgent (address %caller_alias) (address %agent_alias)) (or (pair %removeAgent (address %caller_alias) (address %agent_alias)) (or (pair %registerInvestor (address %caller_alias) (pair (address %investor_alias) (pair (nat %country) (address %identity_kt1)))) (or (pair %updateIdentity (address %caller_alias) (pair (address %investor_alias) (address %new_identity_kt1))) (or (pair %updateCountry (address %caller_alias) (pair (address %investor_alias) (nat %new_country))) (or (pair %deleteIdentity (address %caller_alias) (address %investor_alias)) (or (pair %setIRS (address %caller_alias) (address %new_irs)) (or (pair %setCTR (address %caller_alias) (address %new_ctr)) (or (pair %setTIR (address %caller_alias) (address %new_tir)) (or (pair %setFactory (address %caller_alias) (address %new_factory)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (address %setAdmin)))))))))))) ; storage (pair (address %irs) (pair (address %ctr) (pair (address %tir) (pair (address %factory) (pair (big_map %agents address unit) (pair (address %admin) (address %owner))))))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 12 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; SWAP ; DUP ; GET 9 ; UNIT ; SOME ; DIG 3 ; CDR ; UPDATE ; UPDATE 9 ; NIL operation } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 12 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 9 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "AGENT_NOT_FOUND" ; FAILWITH } ; SWAP ; DUP ; GET 9 ; NONE unit ; DIG 3 ; CDR ; UPDATE ; UPDATE 9 ; NIL operation } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 9 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NOT_AGENT" ; FAILWITH } ; DUP 2 ; CAR ; CONTRACT %registerInvestor (pair (address %caller_alias) (pair (address %investor) (pair (address %identity_kt1) (nat %country)))) ; IF_NONE { PUSH string "IRS_ENTRYPOINT_NOT_FOUND" ; FAILWITH } {} ; DUP 2 ; GET 5 ; DUP 3 ; GET 6 ; DIG 3 ; GET 3 ; SELF_ADDRESS ; PAIR 4 ; SWAP ; PUSH mutez 0 ; DIG 2 ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 9 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NOT_AGENT" ; FAILWITH } ; DUP 2 ; CAR ; CONTRACT %updateIdentity (pair (address %caller_alias) (pair (address %investor) (address %new_identity_kt1))) ; IF_NONE { PUSH string "IRS_ENTRYPOINT_NOT_FOUND" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DIG 2 ; GET 3 ; SELF_ADDRESS ; PAIR 3 ; SWAP ; PUSH mutez 0 ; DIG 2 ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 9 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NOT_AGENT" ; FAILWITH } ; DUP 2 ; CAR ; CONTRACT %updateCountry (pair (address %caller_alias) (pair (address %investor) (nat %new_country))) ; IF_NONE { PUSH string "IRS_ENTRYPOINT_NOT_FOUND" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DIG 2 ; GET 3 ; SELF_ADDRESS ; PAIR 3 ; SWAP ; PUSH mutez 0 ; DIG 2 ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 9 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NOT_AGENT" ; FAILWITH } ; DUP 2 ; CAR ; CONTRACT %removeIdentity (pair (address %caller_alias) (address %investor)) ; IF_NONE { PUSH string "IRS_ENTRYPOINT_NOT_FOUND" ; FAILWITH } {} ; SWAP ; CDR ; SELF_ADDRESS ; PAIR ; SWAP ; PUSH mutez 0 ; DIG 2 ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 12 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 1 } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 12 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 3 } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 12 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 5 } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 12 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 7 } { IF_LEFT { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 12 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 12 } { DUP 2 ; GET 11 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; UPDATE 11 } } } } } ; NIL operation } } } } } } ; PAIR } ; view "isVerified" address bool { UNPAIR ; DUP 2 ; CAR ; DUP 2 ; VIEW "isStored" bool ; IF_NONE { PUSH string "IRS_VIEW_FAILED" ; FAILWITH } {} ; IF { DUP 2 ; GET 3 ; UNIT ; VIEW "getClaimTopics" (set nat) ; IF_NONE { PUSH string "IR_CTR_VIEW_FAILED" ; FAILWITH } {} ; PUSH nat 0 ; DUP 2 ; SIZE ; COMPARE ; EQ ; IF { DROP 3 ; PUSH bool True } { DUP 3 ; CAR ; DIG 2 ; VIEW "identityOf" address ; IF_NONE { PUSH string "IR_IDENTITY_VIEW_FAILED" ; FAILWITH } {} ; DUP ; UNIT ; VIEW "investorOf" address ; IF_NONE { PUSH string "IR_IDENTITY_VIEW_FAILED" ; FAILWITH } {} ; PUSH bool True ; DIG 3 ; ITER { SWAP ; IF { DUP 3 ; DUP 2 ; VIEW "getClaimIdsByTopic" (set bytes) ; IF_NONE { PUSH string "IR_IDENTITY_VIEW_FAILED" ; FAILWITH } {} ; PUSH bool False ; SWAP ; ITER { SWAP ; IF { DROP ; PUSH bool True } { DUP 4 ; DUP 2 ; VIEW "getClaim" (option (pair (nat %topic) (pair (nat %scheme) (pair (key %issuer) (pair (signature %sig_) (pair (bytes %data) (string %uri))))))) ; IF_NONE { PUSH string "IR_IDENTITY_VIEW_FAILED" ; FAILWITH } { IF_NONE { DROP ; PUSH bool False } { DUP 6 ; GET 5 ; DUP 4 ; DUP 3 ; GET 5 ; PAIR ; VIEW "getClaimIssuerForTopic" (option address) ; IF_NONE { PUSH string "IR_TIR_VIEW_FAILED" ; FAILWITH } {} ; IF_NONE { DROP 2 ; PUSH bool False } { DUP 2 ; GET 5 ; DIG 3 ; DUP 4 ; GET 9 ; DIG 4 ; GET 7 ; DUP 6 ; DUP 8 ; PAIR 6 ; VIEW "isClaimValid" bool ; IF_NONE { PUSH string "IR_ISSUER_VIEW_FAILED" ; FAILWITH } {} } } } } } ; SWAP ; DROP } { DROP ; PUSH bool False } } ; DUG 3 ; DROP 3 } } { DROP 2 ; PUSH bool False } } ; view "identityOf" address address { UNPAIR ; SWAP ; CAR ; SWAP ; VIEW "identityOf" address ; IF_NONE { PUSH string "NOT_REGISTERED" ; FAILWITH } {} } ; view "countryOf" address nat { UNPAIR ; SWAP ; CAR ; SWAP ; VIEW "countryOf" nat ; IF_NONE { PUSH string "NOT_REGISTERED" ; FAILWITH } {} } ; view "isAgent" address bool { UNPAIR ; SWAP ; GET 9 ; SWAP ; MEM } ; view "getIRS" unit address { GET 3 } ; view "getCTR" unit address { GET 5 } ; view "getTIR" unit address { GET 7 } ; view "getFactory" unit address { GET 9 } } ; EMPTY_BIG_MAP address unit ; NIL address ; DUP 11 ; DUP 12 ; DUP 14 ; GET 15 ; DUP 14 ; PAIR 6 ; PUSH mutez 0 ; NONE key_hash ; CREATE_CONTRACT { parameter (or (pair %addModule (address %caller_alias) (address %mod_addr)) (or (pair %removeModule (address %caller_alias) (address %mod_addr)) (or (pair %bindToken (address %caller_alias) (address %token_addr)) (or (pair %transferred (address %from_) (pair (address %to_) (nat %amount))) (or (pair %created (address %to_) (nat %amount)) (or (pair %destroyed (address %from_) (nat %amount)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (address %setAdmin)))))))) ; storage (pair (address %admin) (pair (address %owner) (pair (address %admin_sentinel) (pair (address %bound_token) (pair (list %modules address) (big_map %bound_modules address unit)))))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 10 ; DUP 2 ; CDR ; MEM ; IF { DROP } { DUP 2 ; DUP 3 ; GET 9 ; DUP 3 ; CDR ; CONS ; UPDATE 9 ; DIG 2 ; GET 10 ; UNIT ; SOME ; DIG 3 ; CDR ; UPDATE ; UPDATE 10 } ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 10 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "MC_MODULE_NOT_BOUND" ; FAILWITH } ; NIL address ; DUP 3 ; GET 9 ; ITER { SWAP ; DUP 3 ; CDR ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP } { SWAP ; CONS } } ; NIL address ; SWAP ; ITER { CONS } ; DUP 3 ; SWAP ; UPDATE 9 ; DIG 2 ; GET 10 ; NONE unit ; DIG 3 ; CDR ; UPDATE ; UPDATE 10 ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 5 ; DUP 3 ; GET 7 ; COMPARE ; EQ ; IF {} { PUSH string "MC_ALREADY_BOUND" ; FAILWITH } ; CDR ; UPDATE 7 ; NIL operation } { IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_TOKEN" ; FAILWITH } {} ; NIL operation ; DUP 3 ; GET 9 ; ITER { CONTRACT %transferred (pair (address %from_) (pair (address %to_) (nat %amount))) ; IF_NONE { PUSH string "MC_MODULE_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; TRANSFER_TOKENS ; CONS } ; SWAP ; DROP } { IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_TOKEN" ; FAILWITH } {} ; NIL operation ; DUP 3 ; GET 9 ; ITER { CONTRACT %created (pair (address %to_) (nat %amount)) ; IF_NONE { PUSH string "MC_MODULE_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; TRANSFER_TOKENS ; CONS } ; SWAP ; DROP } { IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_TOKEN" ; FAILWITH } {} ; NIL operation ; DUP 3 ; GET 9 ; ITER { CONTRACT %destroyed (pair (address %from_) (nat %amount)) ; IF_NONE { PUSH string "MC_MODULE_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; TRANSFER_TOKENS ; CONS } ; SWAP ; DROP } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 3 } { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; UPDATE 1 } ; NIL operation } } } } } } ; PAIR } ; view "canTransfer" (pair (address %from_) (pair (address %to_) (nat %amount))) bool { UNPAIR ; PUSH bool True ; DIG 2 ; GET 9 ; ITER { SWAP ; IF { DUP 2 ; VIEW "moduleCheck" bool ; IF_NONE { PUSH bool False } {} } { DROP ; PUSH bool False } } ; SWAP ; DROP } ; view "getModules" unit (list address) { GET 11 } ; view "isModuleBound" address bool { UNPAIR ; SWAP ; GET 10 ; SWAP ; MEM } ; view "getTokenBound" unit address { GET 9 } } ; EMPTY_BIG_MAP nat unit ; DUP 13 ; GET 31 ; ITER { SWAP ; UNIT ; SOME ; DIG 2 ; UPDATE } ; DUP 5 ; DUP 4 ; DUP 14 ; DUP 16 ; GET 15 ; DUP 17 ; GET 13 ; PAIR 6 ; PUSH mutez 0 ; NONE key_hash ; CREATE_CONTRACT { parameter (or (pair %addCountry (address %caller_alias) (nat %country_code)) (or (pair %removeCountry (address %caller_alias) (nat %country_code)) (or (pair %bindMC (address %caller_alias) (address %mc_addr)) (or (pair %bindIR (address %caller_alias) (address %ir_addr)) (or (pair %transferred (address %from_) (pair (address %to_) (nat %amount))) (or (pair %created (address %to_) (nat %amount)) (or (pair %destroyed (address %from_) (nat %amount)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (address %setAdmin))))))))) ; storage (pair (address %admin) (pair (address %owner) (pair (address %admin_sentinel) (pair (address %bound_mc) (pair (address %bound_ir) (big_map %allowed_countries nat unit)))))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; SWAP ; DUP ; GET 10 ; UNIT ; SOME ; DIG 3 ; CDR ; UPDATE ; UPDATE 10 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 10 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "CA_COUNTRY_NOT_FOUND" ; FAILWITH } ; SWAP ; DUP ; GET 10 ; NONE unit ; DIG 3 ; CDR ; UPDATE ; UPDATE 10 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 5 ; DUP 3 ; GET 7 ; COMPARE ; EQ ; IF {} { PUSH string "CA_MC_ALREADY_BOUND" ; FAILWITH } ; CDR ; UPDATE 7 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 5 ; DUP 3 ; GET 9 ; COMPARE ; EQ ; IF {} { PUSH string "CA_IR_ALREADY_BOUND" ; FAILWITH } ; CDR ; UPDATE 9 } { IF_LEFT { DROP ; DUP ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_MC" ; FAILWITH } {} } { IF_LEFT { DROP ; DUP ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_MC" ; FAILWITH } {} } { IF_LEFT { DROP ; DUP ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_MC" ; FAILWITH } {} } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 3 } { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; UPDATE 1 } } } } } } } } ; NIL operation ; PAIR } ; view "moduleCheck" (pair (address %from_) (pair (address %to_) (nat %amount))) bool { UNPAIR ; DUP 2 ; GET 5 ; DUP 3 ; GET 9 ; COMPARE ; EQ ; IF { DROP 2 ; PUSH bool False } { DUP 2 ; GET 9 ; DUP 2 ; CAR ; VIEW "countryOf" nat ; IF_NONE { PUSH bool False } { DUP 3 ; GET 10 ; SWAP ; MEM } ; IF { DUP 2 ; GET 9 ; SWAP ; GET 3 ; VIEW "countryOf" nat ; IF_NONE { DROP ; PUSH bool False } { SWAP ; GET 10 ; SWAP ; MEM } } { DROP 2 ; PUSH bool False } } } ; view "isAllowed" nat bool { UNPAIR ; SWAP ; GET 10 ; SWAP ; MEM } ; view "getMCBound" unit address { GET 9 } ; view "getIRBound" unit address { GET 11 } } ; EMPTY_BIG_MAP address unit ; DUP 15 ; GET 27 ; DUP 16 ; GET 25 ; DUP 17 ; GET 23 ; DUP 18 ; GET 21 ; DUP 19 ; GET 19 ; PUSH bool False ; EMPTY_BIG_MAP address bool ; EMPTY_BIG_MAP address nat ; PUSH nat 0 ; EMPTY_BIG_MAP (pair address address) nat ; EMPTY_BIG_MAP address nat ; DUP 16 ; DUP 19 ; DIG 26 ; DUP 28 ; GET 15 ; DUP 29 ; CAR ; PAIR 17 ; PUSH mutez 0 ; NONE key_hash ; CREATE_CONTRACT { parameter (or (pair %transfer (address %caller_alias) (pair (address %to_) (nat %amount))) (or (pair %approve (address %caller_alias) (pair (address %spender) (nat %amount))) (or (pair %transferFrom (address %caller_alias) (pair (address %from_) (pair (address %to_) (nat %amount)))) (or (pair %mint (address %caller_alias) (pair (address %to_) (nat %amount))) (or (pair %burn (address %caller_alias) (pair (address %from_) (nat %amount))) (or (pair %freezePartial (address %caller_alias) (pair (address %addr) (nat %amount))) (or (pair %unfreezePartial (address %caller_alias) (pair (address %addr) (nat %amount))) (or (pair %freezeAddress (address %caller_alias) (address %addr)) (or (pair %unfreezeAddress (address %caller_alias) (address %addr)) (or (pair %forcedTransfer (address %caller_alias) (pair (address %from_) (pair (address %to_) (nat %amount)))) (or (pair %recoveryAddress (address %caller_alias) (pair (address %lost_wallet) (pair (address %new_wallet) (address %investor_onchain_id)))) (or (address %pause) (or (address %unpause) (or (pair %setName (address %caller_alias) (string %new_name)) (or (pair %setSymbol (address %caller_alias) (string %new_symbol)) (or (pair %setOnchainID (address %caller_alias) (address %new_onchain_id)) (or (pair %setVersion (address %caller_alias) (string %new_version)) (or (pair %bindIR (address %caller_alias) (address %ir_addr)) (or (pair %bindMC (address %caller_alias) (address %mc_addr)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (or (address %setAdmin) (or (pair %addAgent (address %caller_alias) (address %agent_alias)) (pair %removeAgent (address %caller_alias) (address %agent_alias)))))))))))))))))))))))) ; storage (pair (address %admin) (pair (address %owner) (pair (address %admin_sentinel) (pair (address %bound_ir) (pair (address %bound_mc) (pair (big_map %balances address nat) (pair (big_map %allowances (pair address address) nat) (pair (nat %total_supply) (pair (big_map %frozen address nat) (pair (big_map %frozen_addrs address bool) (pair (bool %paused) (pair (string %name) (pair (string %symbol) (pair (nat %decimals) (pair (string %version) (pair (address %onchain_id) (big_map %agents address unit))))))))))))))))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 2 ; GET 4 ; DUP 3 ; GET 3 ; DUP 5 ; GET 21 ; IF { PUSH string "TOKEN_PAUSED" ; FAILWITH } {} ; DUP 5 ; GET 19 ; DUP 4 ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "TOKEN_FROZEN_ADDRESS" ; FAILWITH } {} ; DUP 5 ; GET 19 ; DUP 2 ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "TOKEN_FROZEN_ADDRESS" ; FAILWITH } {} ; DUP 2 ; DUP 6 ; GET 17 ; DUP 5 ; GET ; IF_NONE { PUSH nat 0 } {} ; DUP 7 ; GET 11 ; DUP 6 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; LT ; IF { PUSH string "TOKEN_INSUFFICIENT_FREE_BALANCE" ; FAILWITH } {} ; DUP 5 ; GET 7 ; DUP 2 ; VIEW "isVerified" bool ; IF_NONE { PUSH string "TOKEN_IR_VIEW_FAILED" ; FAILWITH } { IF {} { PUSH string "TOKEN_NOT_VERIFIED_RECIPIENT" ; FAILWITH } } ; DUP 5 ; GET 9 ; DUG 2 ; DUP 4 ; PAIR 3 ; VIEW "canTransfer" bool ; IF_NONE { PUSH string "TOKEN_MC_VIEW_FAILED" ; FAILWITH } { IF {} { PUSH string "TOKEN_COMPLIANCE_DENIED" ; FAILWITH } } ; DUP 2 ; GET 4 ; DUP 3 ; GET 3 ; DUP 2 ; DUP 6 ; GET 11 ; DUP 5 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "TOKEN_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; DUP 6 ; DUP 2 ; INT ; EQ ; IF { SWAP ; DROP ; DIG 5 ; GET 11 ; NONE nat ; DUP 6 ; UPDATE } { DIG 6 ; GET 11 ; DIG 2 ; SOME ; DUP 6 ; UPDATE } ; UPDATE 11 ; DIG 2 ; DUP 2 ; GET 11 ; DUP 4 ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; DUP 2 ; DUP 2 ; INT ; EQ ; IF { SWAP ; DROP ; SWAP ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { DIG 2 ; GET 11 ; DIG 2 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; DUP ; GET 9 ; CONTRACT %transferred (pair (address %from_) (pair (address %to_) (nat %amount))) ; IF_NONE { PUSH string "TOKEN_MC_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 5 ; GET 4 ; DIG 5 ; GET 3 ; DIG 5 ; PAIR 3 ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; GET 4 ; DUP 2 ; GET 3 ; DIG 2 ; CAR ; DUP 4 ; DUP 4 ; INT ; EQ ; IF { DIG 3 ; DROP ; DIG 3 ; GET 13 ; NONE nat ; DIG 4 ; DIG 4 ; PAIR ; UPDATE } { DIG 4 ; GET 13 ; DIG 4 ; SOME ; DIG 4 ; DIG 4 ; PAIR ; UPDATE } ; UPDATE 13 ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; GET 6 ; DUP 3 ; GET 13 ; DUP 3 ; CAR ; DUP 4 ; GET 3 ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "TOKEN_INSUFFICIENT_ALLOWANCE" ; FAILWITH } {} ; DUP 2 ; GET 6 ; DUP 3 ; GET 5 ; DUP 4 ; GET 3 ; DUP 6 ; GET 21 ; IF { PUSH string "TOKEN_PAUSED" ; FAILWITH } {} ; DUP 6 ; GET 19 ; DUP 2 ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "TOKEN_FROZEN_ADDRESS" ; FAILWITH } {} ; DUP 6 ; GET 19 ; DUP 3 ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "TOKEN_FROZEN_ADDRESS" ; FAILWITH } {} ; DUP 3 ; DUP 7 ; GET 17 ; DUP 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; DUP 8 ; GET 11 ; DUP 4 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; LT ; IF { PUSH string "TOKEN_INSUFFICIENT_FREE_BALANCE" ; FAILWITH } {} ; DUP 6 ; GET 7 ; DUP 3 ; VIEW "isVerified" bool ; IF_NONE { PUSH string "TOKEN_IR_VIEW_FAILED" ; FAILWITH } { IF {} { PUSH string "TOKEN_NOT_VERIFIED_RECIPIENT" ; FAILWITH } } ; DUP 6 ; GET 9 ; DUG 3 ; PAIR 3 ; VIEW "canTransfer" bool ; IF_NONE { PUSH string "TOKEN_MC_VIEW_FAILED" ; FAILWITH } { IF {} { PUSH string "TOKEN_COMPLIANCE_DENIED" ; FAILWITH } } ; DUP 2 ; GET 6 ; DUP 3 ; GET 5 ; DUP 4 ; GET 3 ; DUP 5 ; CAR ; DUP 6 ; GET 3 ; DUP 8 ; DUP 7 ; INT ; EQ ; IF { DIG 6 ; DROP ; DIG 7 ; GET 13 ; NONE nat ; DIG 4 ; DIG 4 ; PAIR ; UPDATE } { DIG 8 ; GET 13 ; DIG 7 ; SOME ; DIG 4 ; DIG 4 ; PAIR ; UPDATE } ; UPDATE 13 ; DUP 4 ; DUP 2 ; GET 11 ; DUP 4 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "TOKEN_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; DUP 2 ; DUP 2 ; INT ; EQ ; IF { SWAP ; DROP ; SWAP ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { DIG 2 ; GET 11 ; DIG 2 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; DIG 2 ; DUP 2 ; GET 11 ; DUP 4 ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; DUP 2 ; DUP 2 ; INT ; EQ ; IF { SWAP ; DROP ; SWAP ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { DIG 2 ; GET 11 ; DIG 2 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; DUP ; GET 9 ; CONTRACT %transferred (pair (address %from_) (pair (address %to_) (nat %amount))) ; IF_NONE { PUSH string "TOKEN_MC_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; GET 6 ; DUP 5 ; GET 5 ; DIG 5 ; GET 3 ; PAIR 3 ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; DUP 2 ; GET 21 ; IF { PUSH string "TOKEN_PAUSED" ; FAILWITH } {} ; DUP 2 ; GET 7 ; DUP 2 ; GET 3 ; VIEW "isVerified" bool ; IF_NONE { PUSH string "TOKEN_IR_VIEW_FAILED" ; FAILWITH } { IF {} { PUSH string "TOKEN_NOT_VERIFIED_RECIPIENT" ; FAILWITH } } ; DUP ; GET 4 ; DUP 3 ; GET 11 ; DUP 3 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; DUP 2 ; GET 3 ; DUP 4 ; DUP 3 ; INT ; EQ ; IF { DIG 2 ; DROP ; DIG 3 ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { DIG 4 ; GET 11 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; DUP ; DUP 3 ; GET 4 ; DIG 2 ; GET 15 ; ADD ; UPDATE 15 ; DUP ; GET 9 ; CONTRACT %created (pair (address %to_) (nat %amount)) ; IF_NONE { PUSH string "TOKEN_MC_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; GET 4 ; DIG 4 ; GET 3 ; PAIR ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; DUP 2 ; GET 21 ; IF { PUSH string "TOKEN_PAUSED" ; FAILWITH } {} ; DUP ; GET 4 ; DUP 3 ; GET 11 ; DUP 3 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "TOKEN_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 4 ; DUP 3 ; INT ; EQ ; IF { DUP 5 ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { DUP 5 ; GET 11 ; DUP 4 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; DUP 2 ; DIG 4 ; GET 17 ; DUP 5 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; GT ; IF { DUP 3 ; GET 3 ; DUP 2 ; DUP 4 ; INT ; EQ ; IF { DIG 3 ; DROP ; DIG 2 ; GET 17 ; NONE nat ; DIG 3 ; UPDATE } { DIG 2 ; GET 17 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 17 } { SWAP ; DROP } ; DUP ; DUP 3 ; GET 4 ; DIG 2 ; GET 15 ; SUB ; ISNAT ; IF_NONE { PUSH string "TOKEN_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; UPDATE 15 ; DUP ; GET 9 ; CONTRACT %destroyed (pair (address %from_) (nat %amount)) ; IF_NONE { PUSH string "TOKEN_MC_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; GET 4 ; DIG 4 ; GET 3 ; PAIR ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; DUP 2 ; GET 11 ; DUP 2 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; DUP 2 ; GET 4 ; DUP 4 ; GET 17 ; DUP 4 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; DUP 2 ; DUP 2 ; COMPARE ; GT ; IF { DROP } { SWAP ; DROP } ; SWAP ; GET 3 ; DUP 3 ; DUP 3 ; INT ; EQ ; IF { DIG 2 ; DROP ; DIG 2 ; GET 17 ; NONE nat ; DIG 3 ; UPDATE } { DIG 3 ; GET 17 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 17 ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; DUP ; GET 4 ; DUP 3 ; GET 17 ; DUP 3 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH nat 0 } {} ; SWAP ; GET 3 ; DUP 3 ; DUP 3 ; INT ; EQ ; IF { DIG 2 ; DROP ; DIG 2 ; GET 17 ; NONE nat ; DIG 3 ; UPDATE } { DIG 3 ; GET 17 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 17 ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; SWAP ; DUP ; GET 19 ; PUSH bool True ; SOME ; DIG 3 ; CDR ; UPDATE ; UPDATE 19 ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; SWAP ; DUP ; GET 19 ; PUSH bool False ; SOME ; DIG 3 ; CDR ; UPDATE ; UPDATE 19 ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; DUP 2 ; GET 21 ; IF { PUSH string "TOKEN_PAUSED" ; FAILWITH } {} ; DUP 2 ; GET 7 ; DUP 2 ; GET 5 ; VIEW "isVerified" bool ; IF_NONE { PUSH string "TOKEN_IR_VIEW_FAILED" ; FAILWITH } { IF {} { PUSH string "TOKEN_NOT_VERIFIED_RECIPIENT" ; FAILWITH } } ; DUP ; GET 5 ; DUP 2 ; GET 3 ; COMPARE ; EQ ; IF { DROP ; NIL operation } { DUP ; GET 6 ; DUP 3 ; GET 11 ; DUP 3 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "TOKEN_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 4 ; DUP 3 ; INT ; EQ ; IF { DUP 5 ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { DUP 5 ; GET 11 ; DUP 4 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; DUP 2 ; DIG 4 ; GET 17 ; DUP 5 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; GT ; IF { DUP 3 ; GET 3 ; DUP 2 ; DUP 4 ; INT ; EQ ; IF { DIG 3 ; DROP ; DIG 2 ; GET 17 ; NONE nat ; DIG 3 ; UPDATE } { DIG 2 ; GET 17 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 17 } { SWAP ; DROP } ; DUP 2 ; GET 6 ; DUP 2 ; GET 11 ; DUP 4 ; GET 5 ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; DUP 3 ; GET 5 ; DIG 2 ; DUP ; DUP 4 ; INT ; EQ ; IF { DIG 3 ; DROP ; SWAP ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { SWAP ; GET 11 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; DUP ; GET 9 ; CONTRACT %transferred (pair (address %from_) (pair (address %to_) (nat %amount))) ; IF_NONE { PUSH string "TOKEN_MC_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; GET 6 ; DUP 5 ; GET 5 ; DIG 5 ; GET 3 ; PAIR 3 ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 3 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; DUP 2 ; GET 21 ; IF { PUSH string "TOKEN_PAUSED" ; FAILWITH } {} ; DUP 2 ; GET 7 ; DUP 2 ; GET 5 ; VIEW "isVerified" bool ; IF_NONE { PUSH string "TOKEN_IR_VIEW_FAILED" ; FAILWITH } {} ; IF {} { PUSH string "TOKEN_RECOVERY_IDENTITY_MISMATCH" ; FAILWITH } ; DUP 2 ; GET 7 ; DUP 2 ; GET 5 ; VIEW "identityOf" address ; IF_NONE { PUSH string "TOKEN_RECOVERY_IDENTITY_MISMATCH" ; FAILWITH } {} ; DUP 2 ; GET 6 ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_RECOVERY_IDENTITY_MISMATCH" ; FAILWITH } {} ; DUP 2 ; GET 11 ; DUP 2 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; DUP ; INT ; EQ ; IF { PUSH string "TOKEN_RECOVERY_NO_BALANCE" ; FAILWITH } {} ; PUSH nat 0 ; DUP 3 ; GET 3 ; DUP 5 ; DUP 3 ; INT ; EQ ; IF { DIG 2 ; DROP ; DUP 5 ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { DUP 6 ; GET 11 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; DUP 2 ; DUP 2 ; GET 11 ; DUP 5 ; GET 5 ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; DUP 4 ; GET 5 ; DIG 2 ; DUP ; DUP 4 ; INT ; EQ ; IF { DIG 3 ; DROP ; SWAP ; GET 11 ; NONE nat ; DIG 3 ; UPDATE } { SWAP ; GET 11 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 11 ; PUSH nat 0 ; DUP 4 ; GET 3 ; DUP 3 ; DUP 3 ; INT ; EQ ; IF { DIG 2 ; DROP ; DIG 2 ; GET 17 ; NONE nat ; DIG 3 ; UPDATE } { DIG 3 ; GET 17 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 17 ; DIG 3 ; GET 17 ; DUP 4 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; DUP 2 ; GET 17 ; DUP 5 ; GET 5 ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; DUP 4 ; GET 5 ; DIG 2 ; DUP ; DUP 4 ; INT ; EQ ; IF { DIG 3 ; DROP ; SWAP ; GET 17 ; NONE nat ; DIG 3 ; UPDATE } { SWAP ; GET 17 ; DIG 3 ; SOME ; DIG 3 ; UPDATE } ; UPDATE 17 ; DUP ; GET 9 ; CONTRACT %transferred (pair (address %from_) (pair (address %to_) (nat %amount))) ; IF_NONE { PUSH string "TOKEN_MC_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DIG 3 ; DUP 5 ; GET 5 ; DIG 5 ; GET 3 ; PAIR 3 ; TRANSFER_TOKENS ; SWAP ; NIL operation ; DIG 2 ; CONS } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 2 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; PUSH bool True ; UPDATE 21 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; COMPARE ; EQ ; IF { DROP } { DUP 2 ; GET 32 ; SWAP ; MEM ; IF {} { PUSH string "TOKEN_NOT_AGENT" ; FAILWITH } } ; PUSH bool False ; UPDATE 21 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 23 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 25 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 31 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "TOKEN_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ;